/////precompiled////////
#include "precompiled.h"
////////////////////////

#include "prs_FrmLinkAttr.h"
using namespace prs;

// TNodeFrmLinkAttr ///////////////////////////////////////////////////////////
/***********************
//
void TNodeFrmLinkAttr::SetValueInParent(TAttrNode *InParent,TFrmValue *Value,TAttr *&outBindAttr)
{
  outBindAttr = NULL;
  
  if (!Value) { 
    return;
  }
  
  TNodeSearch LinkAttr(InParent); LinkAttr
   .GotoChildren()
    .SearchByType(nodeType_TNodeFrmLinkAttr);

  for (int N = 0; N < LinkAttr.Count(); N++) {
    TNodeFrmLinkAttr *NodeFrmLinkAttr = dynamic_cast<TNodeFrmLinkAttr*>(
     &LinkAttr.Get(N)
    );

    switch (NodeFrmLinkAttr->LinkType.GetValue()) {
      
      case TLinkType::Attr: {
        TAttrNode *PNode = NodeFrmLinkAttr->PNode.GetValue();
        int NAttr = NodeFrmLinkAttr->NAttr.GetValue();
        TAttr *PAttr = PNode->GetAttr(NAttr);

        ////////////////////////////////////////////////////////////////////////
        TNodeFrmControl *NodeFrmControl = dynamic_cast<TNodeFrmControl*>(PNode);
        if (NodeFrmControl) {
          /////////////////////////////////////////////
          if (PAttr->GetAttrName() == attrName_Style) {
            TFrmStyleValue *PValue = dynamic_cast<TFrmStyleValue*>(
              Value
            );
            if (PValue) { 
              NodeFrmControl->Style.SetValue( PValue->Value.GetValue() );
              break;
            }

            TNodeFrmLinkAttr().Except("SetValueInParent[!TNodeFrmControl[style]::Value]");
          }
        }

        outBindAttr = PAttr;
        Value->SetValueFromAttr(PAttr);
      }
      break;

      case TLinkType::Node: {
        TAttrNode *PNode = NodeFrmLinkAttr->PNode.GetValue();

        PNode->OldChildren.Array.Clear();
        Value->OldChildren.Array.MoveTo(PNode->OldChildren.Array);
      }
      break;

      case TLinkType::Param: {
        TAttrNode *PNode = NodeFrmLinkAttr->PNode.GetValue();
        SetValueInParent(PNode,Value,outBindAttr);
      }
      break;
      
      default: 
        TNodeFrmLinkAttr().Except("SetValueInParent[default]");
    }
  }
}
*****************************/